import java.util.*;

public class Practice3 {
    //https://ac.nowcoder.com/acm/problem/229023
    //初始化变量, 通过哈希表来存储每个声部的个数
    static int n;
    static int m;
    static Map<Integer,Integer> map;
    //逆向思路, 正向分配太困难了, 只能枚举组队是否能成功, 不要超过最大组队
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        //找到声部最多的人
        int hashMax = 0;
        map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int in = sc.nextInt();
            map.put(in,map.getOrDefault(in, 0) + 1);
            hashMax = Math.max(map.get(in),hashMax);
        }
        //当声部的个数比组队要多就无法分配
        int hashLen = map.size();
        if(hashLen > m){
            System.out.println(-1);
        }else{
            //枚举每个声部组队从1-最大值(从一个声部每个分配1开始)
            //然后观察是否超过最大组队数, 找到刚刚好成功小于等于m的时候即可
            for(int i = 1;i <= hashMax;i++){
                if(check(i)){
                    System.out.println(i);
                    break;
                }
            }
        }
    }
    public static boolean check(int k){
        int sum = 0;
        for(int a : map.values()){
            int num = a / k + (a % k == 0 ? 0 : 1);
            sum += num;
        }
        if(sum > m){
            return false;
        }else{
            return true;
        }
    }
}
